package com.cskaoyan.market.util;

import javax.servlet.ServletInputStream;
import javax.servlet.http.HttpServletRequest;
import java.io.ByteArrayOutputStream;
import java.io.IOException;


// 这个工具类目的是：
// 通过输入流（request.getInputStream()）从HTTP请求中读取数据，
// 并将其写入到字节数组输出流（ByteArrayOutputStream）中。
// 然后，它将输出流中的字节数据转换为字符串，并以UTF-8编码返回表示HTTP请求体内容的字符串。
// 最后，它关闭输入流和输出流，释放资源，返回请求体字符串。
public class HttpUtil2 {

    // 这是一个公共静态方法，可以通过类名直接调用，无需实例化该类。
    // HttpUtil.getRequestBody()调用
    public static String getRequestBody(HttpServletRequest request) throws IOException {

        // 获取HTTP请求中的输入流，用于读取请求体数据。
        ServletInputStream inputStream = request.getInputStream();

        // 创建一个字节数组输出流，用于存储从输入流读取的数据。
        ByteArrayOutputStream outputStream = new ByteArrayOutputStream();

        int length = 0; // 用于存储每次读取的字节数。
        byte[] bytes = new byte[1024]; // 创建一个1KB大小的字节数组作为缓冲区。

        // 循环读取输入流中的数据，将其写入输出流。
        // 边读边写
        while ((length = inputStream.read(bytes)) != -1){
            outputStream.write(bytes, 0, length); // 将读取的数据写入输出流。
        }

        // 将输出流中的字节数据以UTF-8编码转换成字符串形式。
        String requestBody = outputStream.toString("utf-8");
        outputStream.close();
        inputStream.close();
        return requestBody;
    }
}
